package indi.zn.commons.easiness;



import java.util.Date;
import java.util.Objects;
import java.util.function.Function;

/**
 * @author 周楠
 * @version V1.0
 * 
 *  2020年6月15日
 *  
 *  值处理工具类 ，主要通性处理空对象取值问题，避免重复 空判断 ，在通过 直接选择 获取的值类型简化操作 ，使用  lamda 灵活指定操作
 *  
 */
public class Values {
	
	
	public static  String toString(Object bean) {
		
		return  Objects.isNull(bean)?null:bean.toString();

	}

	public static <T> String valueString(T bean, Function<T, String> func) {

		return value(bean, String.class, func);

	}

	public static <T> String valueString(T bean, String def, Function<T, String> func) {

		return value(bean,def, String.class, func);

	}

	public static <T> Integer valueInteger(T bean, Function<T, Integer> func) {

		return value(bean, Integer.class, func);

	}
	public static <T> Integer valueInteger(T bean,Integer def,  Function<T, Integer> func) {

		return value(bean, def, Integer.class, func);

	}
	

	public static <T> Object valueObject(T bean,Object def, Function<T, Object> func) {

		return value(bean,def, Object.class, func);

	}
	public static <T> Object valueObject(T bean, Function<T, Object> func) {

		return value(bean, Object.class, func);

	}
	
	

	public static <T> Date valueDate(T bean, Function<T, Date> func) {

		return value(bean, Date.class, func);

	}
	public static <T> Date valueDate(T bean,Date def ,Function<T, Date> func) {

		return value(bean,def, Date.class, func);

	}
	
	

	public static <T, R> R value(T bean, Class<R> clazz, Function<T, R> func) {

		R r = null;

		if (!Objects.isNull(bean)) {
			r = func.apply(bean);
		}

		return r;

	}

	public static <T, R> R value(T bean,R def,Class<R> clazz, Function<T, R> func) {

		R r = def;

		if (!Objects.isNull(bean)) {
			r = func.apply(bean);
		}

		return r;

	}

}
